package com.project.lk.nurseapp.base;

import android.app.Application;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.StrictMode;

import com.firefly1126.permissionaspect.PermissionCheckSDK;
import com.project.lk.nurseapp.db.DaoMaster;
import com.project.lk.nurseapp.db.DaoSession;
import com.project.lk.nurseapp.db.RemindBeanDao;
import com.project.lk.nurseapp.db.UserDaoBeanDao;


import okhttp3.OkHttpClient;
/**
 * 功能介绍：第三方的sdk,网络监听,数据库的升级操作,第三方框架全局配置,app应用配置
 * 项目名：
 * 模块名称：
 * 作者：LK
 * 日期：2018/1/9
 * 修改日期：
 */

public class BaseApp extends Application {
    public static BaseApp app;
    private static Context mContext;
    Bitmap teamBm = null;
     private DaoSession mDaoSession;
    private SQLiteDatabase userDb;
    private SQLiteDatabase remindDb;
//    private WorkerThread mWorkerThread;

//    public synchronized void initWorkerThread() {
//        if (mWorkerThread == null) {
//            mWorkerThread = new WorkerThread(getApplicationContext());
//            mWorkerThread.start();
//
//            mWorkerThread.waitForReady();
//        }
//    }

//    public synchronized WorkerThread getWorkerThread() {
//        return mWorkerThread;
//    }
    //内存泄漏检测工具
//    public static RefWatcher getRefWatcher(Context context) {
//        BaseApp application = (BaseApp) context.getApplicationContext();
//        return application.refWatcher;
//    }

//    private RefWatcher refWatcher;
//    @Override
//    protected void attachBaseContext(Context base) {
//    super.attachBaseContext(base); MultiDex.install(this);
//    }
    @Override
    public void onCreate() {
        super.onCreate();
        app = this;
        initOkHttp();
        // ... your codes
        mContext = getApplicationContext();
         PermissionCheckSDK.init(this);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(builder.build());
        }

        setUserDatabase();
        setRemindDatabase();


    }

    private void setRemindDatabase() {
        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(getApplicationContext(), "remind.db", null);
        DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
           mDaoSession = daoMaster.newSession();
        // 注意：该数据库连接属于 DaoMaster，所以多个 Session 指的是相同的数据库连接。
        RemindBeanDao remindBeanDao = mDaoSession.getRemindBeanDao();
        remindDb = devOpenHelper.getWritableDatabase();
    }

    public SQLiteDatabase getRemindDb() {
        return remindDb;
    }

    //设置greenDao
    private void setUserDatabase() {
// 通过 DaoMaster 的内部类 DevOpenHelper，你可以得到一个便利的 SQLiteOpenHelper 对象。
        // 可能你已经注意到了，你并不需要去编写「CREATE TABLE」这样的 SQL 语句，因为 greenDAO 已经帮你做了。
        // 注意：默认的 DaoMaster.DevOpenHelper 会在数据库升级时，删除所有的表，意味着这将导致数据的丢失。
        // 所以，在正式的项目中，你还应该做一层封装，来实现数据库的安全升级。
  DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(getApplicationContext(), "user.db", null);
     DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
     mDaoSession = daoMaster.newSession();
 // 注意：该数据库连接属于 DaoMaster，所以多个 Session 指的是相同的数据库连接。
    UserDaoBeanDao userDaoBeanDao = mDaoSession.getUserDaoBeanDao();
    userDb = devOpenHelper.getWritableDatabase();
    }
  public DaoSession getDaoSession() {
     return mDaoSession;
  }
    public SQLiteDatabase getDb() {
        return userDb;
    }
    //初始化OkHttpClient
    private void initOkHttp() {
        OkHttpClient okHttpClient = new OkHttpClient();

    }
    public static Context getContext(){
        return mContext;
    }



    public static BaseApp getInstance() {
        return app;
    }



}
